﻿/*  Eleven Business Suite : Un ERP básico para pequeños empresarios.
 *  Copyright (C) 2011  Francis Bolaños Arias
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>;.
 */

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ElevenCore;

namespace ElevenGUI
{
    public partial class FrmRegiones : Form
    {

        private DataTable dtPaPaises;

        private DataTable dtProvPaises;
        private DataTable dtProvProvincias;

        private DataTable dtCanPaises;
        private DataTable dtCanProvincias;
        private DataTable dtCanCantones;

        private DataTable dtDistPaises;
        private DataTable dtDistProvincias;
        private DataTable dtDistCantones;
        private DataTable dtDistDistritos;

        public FrmRegiones()
        {
            InitializeComponent();
        }

        private void FrmRegiones_Load(object sender, EventArgs e)
        {
            //Submódulo Paises
            cargarListaPaises();

            //Submódulo Provincias
            cargarComboProvPaises();
            cargarListaProvincias();

            //Submódulo Cantones
            cargarComboCanPaises();
            cargarComboCanProvincias();
            cargarListaCantones();

            //Submódulo Distritos
            cargarComboDistPaises();
            cargarComboDistProvincias();
            cargarComboDistCantones();
            cargarListaDistritos();
        }

        #region Eventos ListBox

        private void lstDistritos_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                DataRowView dr = (DataRowView)(lstDistritos.SelectedItem);
                txtDistNombre.Text = dr["Nombre"].ToString();
                txtDistNombre.Enabled = true;
            }
            catch (NullReferenceException) { }
        }

        private void lstCantones_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                DataRowView dr = (DataRowView)(lstCantones.SelectedItem);
                txtCanNombre.Text = dr["Nombre"].ToString();
                txtCanNombre.Enabled = true;
            }
            catch (NullReferenceException) { }
        }

        private void lstProvincias_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                DataRowView dr = (DataRowView)(lstProvincias.SelectedItem);
                txtProvNombre.Text = dr["Nombre"].ToString();
                txtProvNombre.Enabled = true;
            }
            catch (NullReferenceException) { }
        }

        private void lstPaises_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                DataRowView dr = (DataRowView)(lstPaises.SelectedItem);
                txtPaisNombre.Text = dr["Nombre"].ToString();
                txtPaisNombre.Enabled = true;
            }
            catch (NullReferenceException) { }
        }

        #endregion

        #region Métodos de Carga de Datos

        private void cargarListaPaises()
        {
            dtPaPaises = GENPais.consultar();
            lstPaises.DataSource = dtPaPaises;
            lstPaises.DisplayMember = "Nombre";
            lstPaises.ValueMember = "IdPais";
        }

        private void cargarComboProvPaises()
        {
            dtProvPaises = GENPais.consultar();
            cbProvPais.DataSource = dtProvPaises;
            cbProvPais.DisplayMember = "Nombre";
            cbProvPais.ValueMember = "IdPais";
        }

        private void cargarListaProvincias()
        {
            try
            {
                txtProvNombre.Text = "";
                dtProvProvincias = GENProvincia.consultar(int.Parse(cbProvPais.SelectedValue.ToString()));
                lstProvincias.DataSource = dtProvProvincias;
                lstProvincias.DisplayMember = "Nombre";
                lstProvincias.ValueMember = "IdProvincia";
            }
            catch (FormatException) { }
            catch (NullReferenceException) { }
        }

        private void cargarComboCanPaises()
        {
            dtCanPaises = GENPais.consultar();
            cbCanPais.DataSource = dtCanPaises;
            cbCanPais.DisplayMember = "Nombre";
            cbCanPais.ValueMember = "IdPais";
        }

        private void cargarComboCanProvincias()
        {
            try
            {
                if (!cbxEditarCanProv.Checked)
                {
                    lstCantones.DataSource = new DataTable();
                    txtCanNombre.Text = "";
                }
                dtCanProvincias = GENProvincia.consultar(int.Parse(cbCanPais.SelectedValue.ToString()));
                cbCanProvincia.DataSource = dtCanProvincias;
                cbCanProvincia.DisplayMember = "Nombre";
                cbCanProvincia.ValueMember = "IdProvincia";
            }
            catch (FormatException) { }
            catch (NullReferenceException) { }
        }

        private void cargarListaCantones()
        {
            try
            {

                txtCanNombre.Text = "";
                dtCanCantones = GENCanton.consultar(int.Parse(cbCanProvincia.SelectedValue.ToString()));
                lstCantones.DataSource = dtCanCantones;
                lstCantones.DisplayMember = "Nombre";
                lstCantones.ValueMember = "IdCanton";

            }
            catch (FormatException) { }
            catch (NullReferenceException) { }
        }

        private void cargarComboDistPaises()
        {
            dtDistPaises = GENPais.consultar();
            cbDistPais.DataSource = dtDistPaises;
            cbDistPais.DisplayMember = "Nombre";
            cbDistPais.ValueMember = "IdPais";
        }

        private void cargarComboDistProvincias()
        {
            try
            {
                if (!cbxEditarDistCanton.Checked)
                {
                    lstDistritos.DataSource = new DataTable();
                    cbDistCanton.DataSource = new DataTable();
                    txtDistNombre.Text = "";
                }
                dtDistProvincias = GENProvincia.consultar(int.Parse(cbDistPais.SelectedValue.ToString()));
                cbDistProvincia.DataSource = dtDistProvincias;
                cbDistProvincia.DisplayMember = "Nombre";
                cbDistProvincia.ValueMember = "IdProvincia";
            }
            catch (FormatException) { }
            catch (NullReferenceException) { }
        }

        private void cargarComboDistCantones()
        {
            try
            {
                if (!cbxEditarDistCanton.Checked)
                {
                    lstDistritos.DataSource = new DataTable();
                    txtDistNombre.Text = "";
                }
                dtDistCantones = GENCanton.consultar(int.Parse(cbDistProvincia.SelectedValue.ToString()));
                cbDistCanton.DataSource = dtDistCantones;
                cbDistCanton.DisplayMember = "Nombre";
                cbDistCanton.ValueMember = "IdCanton";
            }
            catch (FormatException) { }
            catch (NullReferenceException) { }
        }

        private void cargarListaDistritos()
        {
            try
            {
                lstDistritos.DataSource = new DataTable();
                txtDistNombre.Text = "";
                dtDistDistritos = GENDistrito.consultar(int.Parse(cbDistCanton.SelectedValue.ToString()));
                lstDistritos.DataSource = dtDistDistritos;
                lstDistritos.DisplayMember = "Nombre";
                lstDistritos.ValueMember = "IdDistrito";
            }
            catch (FormatException) { }
            catch (NullReferenceException) { }

        }

        #endregion

        #region Eventos de ComboBox

        private void cbProvPais_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (!cbxEditarProvPais.Checked)
            {
                cargarListaProvincias();
            }
        }

        private void cbCanPais_SelectedIndexChanged(object sender, EventArgs e)
        {

            cargarComboCanProvincias();

        }

        private void cbCanProvincia_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (!cbxEditarCanProv.Checked)
            {
                cargarListaCantones();
            }
        }

        private void cbDistPais_SelectedIndexChanged(object sender, EventArgs e)
        {
            cargarComboDistProvincias();
        }

        private void cbDistProvincia_SelectedIndexChanged(object sender, EventArgs e)
        {
            cargarComboDistCantones();
        }

        private void cbDistCanton_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (!cbxEditarDistCanton.Checked)
            {
                cargarListaDistritos();
            }
        }

        #endregion

        #region Eventos Botones Nuevo

        private void btnNuevoDist_Click(object sender, EventArgs e)
        {
            txtDistNombre.Text = "";
            txtDistNombre.Enabled = true;
            txtDistNombre.Focus();
            lstDistritos.Enabled = false;
            btnNuevoDist.Enabled = false;
            btnEliminarDist.Enabled = false;
            btnCancelarDist.Enabled = true;
        }

        private void btnNuevoCan_Click(object sender, EventArgs e)
        {
            txtCanNombre.Text = "";
            txtCanNombre.Enabled = true;
            txtCanNombre.Focus();
            lstCantones.Enabled = false;
            btnNuevoCan.Enabled = false;
            btnEliminarCan.Enabled = false;
            btnCancelarCan.Enabled = true;
        }

        private void btnNuevaProv_Click(object sender, EventArgs e)
        {
            txtProvNombre.Text = "";
            txtProvNombre.Enabled = true;
            txtProvNombre.Focus();
            lstProvincias.Enabled = false;
            btnNuevaProv.Enabled = false;
            btnEliminarProv.Enabled = false;
            btnCancelarProv.Enabled = true;
        }

        private void btnNuevoPais_Click(object sender, EventArgs e)
        {
            txtPaisNombre.Text = "";
            txtPaisNombre.Enabled = true;
            txtPaisNombre.Focus();
            lstPaises.Enabled = false;
            btnNuevoPais.Enabled = false;
            btnEliminarPais.Enabled = false;
            btnCancelarPais.Enabled = true;
        }

        #endregion

        #region Eventos Botones Cancelar

        private void btnCancelarDist_Click(object sender, EventArgs e)
        {
            lstDistritos.Enabled = true;
            btnNuevoDist.Enabled = true;
            btnEliminarDist.Enabled = true;
            btnCancelarDist.Enabled = false;
            txtDistNombre.Text = "";
            txtDistNombre.Enabled = false;
        }

        private void btnCancelarCan_Click(object sender, EventArgs e)
        {
            lstCantones.Enabled = true;
            btnNuevoCan.Enabled = true;
            btnEliminarCan.Enabled = true;
            btnCancelarCan.Enabled = false;
            txtCanNombre.Text = "";
            txtCanNombre.Enabled = false;
        }

        private void btnCancelarProv_Click(object sender, EventArgs e)
        {
            lstProvincias.Enabled = true;
            btnNuevaProv.Enabled = true;
            btnEliminarProv.Enabled = true;
            btnCancelarProv.Enabled = false;
            txtProvNombre.Text = "";
            txtProvNombre.Enabled = false;
        }

        private void btnCancelarPais_Click(object sender, EventArgs e)
        {
            lstPaises.Enabled = true;
            btnNuevoPais.Enabled = true;
            btnEliminarPais.Enabled = true;
            txtPaisNombre.Text = "";
            txtPaisNombre.Enabled = false;
            btnCancelarPais.Enabled = false;
        }

        #endregion

        #region Eventos Botones Guardar

        private void btnGuardarDist_Click(object sender, EventArgs e)
        {
            if (lstDistritos.Enabled)
            {
                try
                {
                    DataRowView dr = (DataRowView)(lstDistritos.SelectedItem);
                    DataRowView dr2 = (DataRowView)(cbDistCanton.SelectedItem);
                    GENDistrito dist = new GENDistrito(int.Parse(dr["IdDistrito"].ToString()), int.Parse(dr2["IdCanton"].ToString()), txtDistNombre.Text);
                    dist.modificar();
                    GLOMensajeAceptar mensaje = new GLOMensajeAceptar("Distrito actualizado con éxito");
                    mensaje.ShowDialog();
                    cargarListaDistritos();
                }
                catch (NullReferenceException ne)
                {
                    GLOMensajeError error = new GLOMensajeError("Error de validación", "Para actualizar un distrito debe elegir uno de la lista de distritos a la izquierda.\nSi desea crear uno nuevo de click en el botón \"Nuevo\".\n\n Mensaje técnico del error: " + ne.Message, "NullReferenceException");
                    error.ShowDialog();
                }
                catch (ValidadorException ve)
                {
                    if (String.IsNullOrEmpty(txtPaisNombre.Text))
                    {
                        GLOMensajeError error = new GLOMensajeError("Error al validar los datos.", "El nombre del distrito no debe ir en blanco.\n\n Mensaje técnico del error: " + ve.Message, "ValidadorException");
                        error.ShowDialog();
                    }
                }
                catch (SqlException se)
                {
                    GLOMensajeError error = new GLOMensajeError("Error grave al conectar con la base de datos.", "Este error puede deberse a que se haya perdido la conexión con la base de datos o ocurriera un error en el sistema.\n\n Mensaje técnico del error: " + se.Message, "SqlException");
                    error.ShowDialog();
                }
            }
            else
            {
                try
                {
                    GENDistrito dist = new GENDistrito(0, int.Parse(cbDistCanton.SelectedValue.ToString()), txtDistNombre.Text);
                    dist.insertar();
                    GLOMensajeAceptar mensaje = new GLOMensajeAceptar("Distrito insertado con éxito");
                    mensaje.ShowDialog();
                    btnCancelarDist.PerformClick();
                    cargarListaDistritos();
                }
                catch (ValidadorException ve)
                {
                    if (String.IsNullOrEmpty(txtDistNombre.Text))
                    {
                        GLOMensajeError error = new GLOMensajeError("Error al validar los datos.", "El nombre del distrito no debe ir en blanco.\n\n Mensaje técnico del error: " + ve.Message, "ValidadorException");
                        error.ShowDialog();
                    }
                }
                catch (NullReferenceException ne)
                {
                    GLOMensajeError error = new GLOMensajeError("Error de validación", "Debe escoger país, provincia y cantón.\n\n Mensaje técnico del error: " + ne.Message, "NullReferenceException");
                    error.ShowDialog();
                }
                catch (SqlException se)
                {
                    GLOMensajeError error = new GLOMensajeError("Error grave al conectar con la base de datos.", "Este error puede deberse a que se haya perdido la conexión con la base de datos o ocurriera un error en el sistema.\n\n Mensaje técnico del error: " + se.Message, "SqlException");
                    error.ShowDialog();
                }
            }
        }

        private void btnGuardarCan_Click(object sender, EventArgs e)
        {
            if (lstCantones.Enabled)
            {
                try
                {
                    DataRowView dr = (DataRowView)(lstCantones.SelectedItem);
                    DataRowView dr2 = (DataRowView)(cbCanProvincia.SelectedItem);
                    GENCanton can = new GENCanton(int.Parse(dr["IdCanton"].ToString()), int.Parse(dr2["IdProvincia"].ToString()), txtCanNombre.Text);
                    can.modificar();
                    GLOMensajeAceptar mensaje = new GLOMensajeAceptar("Cantón actualizado con éxito");
                    mensaje.ShowDialog();
                    cargarListaCantones();
                    cargarComboDistCantones();
                }
                catch (NullReferenceException ne)
                {
                    GLOMensajeError error = new GLOMensajeError("Error de validación", "Para actualizar un cantón debe elegir uno de la lista de cantones a la izquierda.\n Si desea crear uno nuevo de click en el botón \"Nuevo\".\n\n Mensaje técnico del error: " + ne.Message, "NullReferenceException");
                    error.ShowDialog();
                }
                catch (ValidadorException ve)
                {
                    if (String.IsNullOrEmpty(txtPaisNombre.Text))
                    {
                        GLOMensajeError error = new GLOMensajeError("Error al validar los datos.", "El nombre del cantón no debe ir en blanco.\n\n Mensaje técnico del error: " + ve.Message, "ValidadorException");
                        error.ShowDialog();
                    }
                }
                catch (SqlException se)
                {
                    GLOMensajeError error = new GLOMensajeError("Error grave al conectar con la base de datos.", "Este error puede deberse a que se haya perdido la conexión con la base de datos o ocurriera un error en el sistema.\n\n Mensaje técnico del error: " + se.Message, "SqlException");
                    error.ShowDialog();
                }
            }
            else
            {
                try
                {
                    GENCanton canton = new GENCanton(0, int.Parse(cbCanProvincia.SelectedValue.ToString()), txtCanNombre.Text);
                    canton.insertar();
                    GLOMensajeAceptar mensaje = new GLOMensajeAceptar("Cantón insertado con éxito");
                    mensaje.ShowDialog();
                    btnCancelarCan.PerformClick();
                    cargarListaCantones();
                    cargarComboDistCantones();
                }
                catch (ValidadorException ve)
                {
                    if (String.IsNullOrEmpty(txtCanNombre.Text))
                    {
                        GLOMensajeError error = new GLOMensajeError("Error al validar los datos.", "El nombre del cantón no debe ir en blanco.\n\n Mensaje técnico del error: " + ve.Message, "ValidadorException");
                        error.ShowDialog();
                    }
                }
                catch (NullReferenceException ne)
                {
                    GLOMensajeError error = new GLOMensajeError("Error de validación", "Debe escoger país y provincia.\n\n Mensaje técnico del error: " + ne.Message, "NullReferenceException");
                    error.ShowDialog();
                }
                catch (SqlException se)
                {
                    GLOMensajeError error = new GLOMensajeError("Error grave al conectar con la base de datos.", "Este error puede deberse a que se haya perdido la conexión con la base de datos o ocurriera un error en el sistema.\n\n Mensaje técnico del error: " + se.Message, "SqlException");
                    error.ShowDialog();
                }
            }
        }

        private void btnGuardarProv_Click(object sender, EventArgs e)
        {
            if (lstProvincias.Enabled)
            {
                try
                {
                    DataRowView dr = (DataRowView)(lstProvincias.SelectedItem);
                    DataRowView dr2 = (DataRowView)(cbProvPais.SelectedItem);
                    GENProvincia prov = new GENProvincia(int.Parse(dr["IdProvincia"].ToString()), int.Parse(dr2["IdPais"].ToString()), txtProvNombre.Text);
                    prov.modificar();
                    GLOMensajeAceptar mensaje = new GLOMensajeAceptar("Provincia actualizada con éxito");
                    mensaje.ShowDialog();
                    cargarListaProvincias();
                    cargarComboCanProvincias();
                    cargarComboDistProvincias();
                }
                catch (NullReferenceException ne)
                {
                    GLOMensajeError error = new GLOMensajeError("Error de validación", "Para actualizar una provincia debe elegir una de la lista de provincias a la izquierda.\n Si desea crear una nueva de click en el botón \"Nueva\".\n\n Mensaje técnico del error: " + ne.Message, "NullReferenceException");
                    error.ShowDialog();
                }
                catch (ValidadorException ve)
                {
                    if (String.IsNullOrEmpty(txtPaisNombre.Text))
                    {
                        GLOMensajeError error = new GLOMensajeError("Error al validar los datos.", "El nombre del país no debe ir en blanco.\n\n Mensaje técnico del error: " + ve.Message, "ValidadorException");
                        error.ShowDialog();
                    }
                }
                catch (SqlException se)
                {
                    GLOMensajeError error = new GLOMensajeError("Error grave al conectar con la base de datos.", "Este error puede deberse a que se haya perdido la conexión con la base de datos o ocurriera un error en el sistema.\n\n Mensaje técnico del error: " + se.Message, "SqlException");
                    error.ShowDialog();
                }
            }
            else
            {
                try
                {
                    GENProvincia prov = new GENProvincia(0, int.Parse(cbProvPais.SelectedValue.ToString()), txtProvNombre.Text);
                    prov.insertar();
                    GLOMensajeAceptar mensaje = new GLOMensajeAceptar("Provincia insertada con éxito");
                    mensaje.ShowDialog();
                    btnCancelarProv.PerformClick();
                    cargarListaProvincias();
                    cargarComboCanProvincias();
                    cargarComboDistProvincias();
                }
                catch (ValidadorException ve)
                {
                    if (String.IsNullOrEmpty(txtProvNombre.Text))
                    {
                        GLOMensajeError error = new GLOMensajeError("Error al validar los datos.", "El nombre de la provincia no debe ir en blanco.\n\n Mensaje técnico del error: " + ve.Message, "ValidadorException");
                        error.ShowDialog();
                    }
                }
                catch (NullReferenceException ne)
                {
                    GLOMensajeError error = new GLOMensajeError("Error de validación", "Debe escoger país.\n\n Mensaje técnico del error: " + ne.Message, "NullReferenceException");
                    error.ShowDialog();
                }
                catch (SqlException se)
                {
                    GLOMensajeError error = new GLOMensajeError("Error grave al conectar con la base de datos.", "Este error puede deberse a que se haya perdido la conexión con la base de datos o ocurriera un error en el sistema.\n\n Mensaje técnico del error: " + se.Message, "SqlException");
                    error.ShowDialog();
                }
            }
        }

        private void btnGuardarPais_Click(object sender, EventArgs e)
        {
            if (lstPaises.Enabled)
            {
                try
                {
                    DataRowView dr = (DataRowView)(lstPaises.SelectedItem);
                    GENPais pais = new GENPais(int.Parse(dr["IdPais"].ToString()), txtPaisNombre.Text);
                    pais.modificar();
                    GLOMensajeAceptar mensaje = new GLOMensajeAceptar("País actualizado con éxito");
                    mensaje.ShowDialog();
                    cargarListaPaises();
                    cargarComboProvPaises();
                    cargarComboCanPaises();
                    cargarComboDistPaises();
                }
                catch (NullReferenceException ne)
                {
                    GLOMensajeError error = new GLOMensajeError("Error de validación", "Para actualizar un país debe elegir uno de la lista de paises a la izquierda.\n Si desea crear uno nuevo de click en el botón \"Nuevo\".\n\n Mensaje técnico del error: " + ne.Message, "NullReferenceException");
                    error.ShowDialog();
                }
                catch (ValidadorException ve)
                {
                    if (String.IsNullOrEmpty(txtPaisNombre.Text))
                    {
                        GLOMensajeError error = new GLOMensajeError("Error al validar los datos.", "El nombre del país no debe ir en blanco.\n\n Mensaje técnico del error: " + ve.Message, "ValidadorException");
                        error.ShowDialog();
                    }
                }
                catch (SqlException se)
                {
                    GLOMensajeError error = new GLOMensajeError("Error grave al conectar con la base de datos.", "Este error puede deberse a que se haya perdido la conexión con la base de datos o ocurriera un error en el sistema.\n\n Mensaje técnico del error: " + se.Message, "SqlException");
                    error.ShowDialog();
                }
            }
            else
            {
                try
                {
                    GENPais pais = new GENPais(0, txtPaisNombre.Text);
                    pais.insertar();
                    GLOMensajeAceptar mensaje = new GLOMensajeAceptar("País insertado con éxito");
                    mensaje.ShowDialog();
                    btnCancelarPais.PerformClick();
                    cargarListaPaises();
                    cargarComboProvPaises();
                    cargarComboCanPaises();
                    cargarComboDistPaises();
                }
                catch (ValidadorException ve)
                {
                    if (String.IsNullOrEmpty(txtPaisNombre.Text))
                    {
                        GLOMensajeError error = new GLOMensajeError("Error al validar los datos.", "El nombre del país no debe ir en blanco.\n\n Mensaje técnico del error: " + ve.Message, "ValidadorException");
                        error.ShowDialog();
                    }
                }
                catch (SqlException se)
                {
                    GLOMensajeError error = new GLOMensajeError("Error grave al conectar con la base de datos.", "Este error puede deberse a que se haya perdido la conexión con la base de datos o ocurriera un error en el sistema.\n\n Mensaje técnico del error: " + se.Message, "SqlException");
                    error.ShowDialog();
                }
            }
        }

        #endregion

        #region Eventos Botones Eliminar

        private void btnEliminarDist_Click(object sender, EventArgs e)
        {
            try
            {
                DataRowView dr = (DataRowView)(lstDistritos.SelectedItem);
                GENDistrito dist = new GENDistrito(int.Parse(dr["IdDistrito"].ToString()), 0, "N");
                if (dist.eliminar())
                {
                    txtDistNombre.Text = "";
                    txtDistNombre.Enabled = false;
                    GLOMensajeAceptar mensaje = new GLOMensajeAceptar("Se ha eliminado el distrito");
                    mensaje.ShowDialog();
                }
                else {
                    GLOMensajeAceptar mensaje = new GLOMensajeAceptar("No puede borrar el distrito porque tiene \r\n proveedores, clientes o rutas asociados a el.");
                    mensaje.ShowDialog();
                }
                cargarListaDistritos();
            }
            catch (NullReferenceException ne)
            {
                GLOMensajeError error = new GLOMensajeError("Error de validación", "Debe elegir un distrito de la lista \r\n a la izquierda para eliminarlo.\n\n Mensaje técnico del error: " + ne.Message, "NullReferenceException");
                error.ShowDialog();
            }
            catch (SqlException se)
            {
                GLOMensajeError error = new GLOMensajeError("Error grave al conectar con la base de datos.", "Este error puede deberse a que se haya perdido la conexión con la base de datos o ocurriera un error en el sistema.\n\n Mensaje técnico del error: " + se.Message, "SqlException");
                error.ShowDialog();
            }
        }

        private void btnEliminarCan_Click(object sender, EventArgs e)
        {
            try
            {
                DataRowView dr = (DataRowView)(lstCantones.SelectedItem);
                GENCanton can = new GENCanton(int.Parse(dr["IdCanton"].ToString()), 0, "N");
                bool eliminado = can.eliminar();
                if (eliminado)
                {
                    txtCanNombre.Text = "";
                    txtCanNombre.Enabled = false;
                    GLOMensajeAceptar mensaje = new GLOMensajeAceptar("Se ha eliminado el cantón");
                    mensaje.ShowDialog();
                }
                else
                {
                    GLOMensajeAceptar mensaje = new GLOMensajeAceptar("No es posible eliminar el cantón porque \r\n tiene distritos asociados");
                    mensaje.ShowDialog();
                }
                cargarListaCantones();
                cargarComboDistCantones();
            }
            catch (NullReferenceException ne)
            {
                GLOMensajeError error = new GLOMensajeError("Error de validación", "Debe elegir un cantón de la lista a la izquierda para eliminarlo.\n\n Mensaje técnico del error: " + ne.Message, "NullReferenceException");
                error.ShowDialog();
            }
            catch (SqlException se)
            {
                GLOMensajeError error = new GLOMensajeError("Error grave al conectar con la base de datos.", "Este error puede deberse a que se haya perdido la conexión con la base de datos o ocurriera un error en el sistema.\n\n Mensaje técnico del error: " + se.Message, "SqlException");
                error.ShowDialog();
            }
        }

        private void btnEliminarProv_Click(object sender, EventArgs e)
        {
            try
            {
                DataRowView dr = (DataRowView)(lstProvincias.SelectedItem);
                GENProvincia prov = new GENProvincia(int.Parse(dr["IdProvincia"].ToString()), 0, "N");
                bool eliminado = prov.eliminar();
                if (eliminado)
                {
                    txtProvNombre.Text = "";
                    txtProvNombre.Enabled = false;
                    GLOMensajeAceptar mensaje = new GLOMensajeAceptar("Se ha eliminado la provincia");
                    mensaje.ShowDialog();
                }
                else
                {
                    GLOMensajeAceptar mensaje = new GLOMensajeAceptar("No es posible eliminar la provincia porque \r\n tiene cantones asociados");
                    mensaje.ShowDialog();
                }
                cargarListaProvincias();
                cargarComboCanProvincias();
                cargarComboDistProvincias();
            }
            catch (NullReferenceException ne)
            {
                GLOMensajeError error = new GLOMensajeError("Error de validación", "Debe elegir una provincia de la lista a la izquierda para eliminarla.\n\n Mensaje técnico del error: " + ne.Message, "NullReferenceException");
                error.ShowDialog();
            }
            catch (SqlException se)
            {
                GLOMensajeError error = new GLOMensajeError("Error grave al conectar con la base de datos.", "Este error puede deberse a que se haya perdido la conexión con la base de datos o ocurriera un error en el sistema.\n\n Mensaje técnico del error: " + se.Message, "SqlException");
                error.ShowDialog();
            }
        }

        private void btnEliminarPais_Click(object sender, EventArgs e)
        {
            try
            {
                DataRowView dr = (DataRowView)(lstPaises.SelectedItem);
                GENPais pais = new GENPais(int.Parse(dr["IdPais"].ToString()), "N");
                bool eliminado = pais.eliminar();
                if (eliminado)
                {
                    txtPaisNombre.Text = "";
                    txtPaisNombre.Enabled = false;
                    GLOMensajeAceptar mensaje = new GLOMensajeAceptar("Se ha eliminado el país");
                    mensaje.ShowDialog();
                }
                else
                {
                    GLOMensajeAceptar mensaje = new GLOMensajeAceptar("No es posible eliminar el país porque \r\n tiene provincias asociadas");
                    mensaje.ShowDialog();
                }
                cargarListaPaises();
                cargarComboProvPaises();
                cargarComboCanPaises();
                cargarComboDistPaises();
            }
            catch (NullReferenceException ne)
            {
                GLOMensajeError error = new GLOMensajeError("Error de validación", "Debe elegir el país de la lista a la izquierda para eliminarlo.\n\n Mensaje técnico del error: " + ne.Message, "NullReferenceException");
                error.ShowDialog();
            }
            catch (SqlException se)
            {
                GLOMensajeError error = new GLOMensajeError("Error grave al conectar con la base de datos.", "Este error puede deberse a que se haya perdido la conexión con la base de datos o ocurriera un error en el sistema.\n\n Mensaje técnico del error: " + se.Message, "SqlException");
                error.ShowDialog();
            }
        }

        #endregion

    }
}
